package blue.global.base;

import java.util.List;

/**
 * 可分页的数据查询
 * 
 * @author zhengj
 * @date 2009-4-3 1.0
 */
public interface IPageable<T>
{
	/**
	 * 取得数据库的记录数
	 * 
	 * @param entity 查询参数，若为 null，则查询所有记录
	 * @return 数据库的记录数
	 */
	int getRows(T entity);
	
	/**
	 * 列出在数据库中的对象，必须分页
	 * 
	 * @param entity 查询参数，若为 null，则查询所有记录
	 * @param start 起始行号，0开始
	 * @param size 最多记录数，不能小于1
	 * @return
	 * @throws IllegalArgumentException 当起始行号小于0或最多记录数小于1时抛出
	 */
	List<T> list(T entity, int start, int size) throws IllegalArgumentException;
	
	/**
	 * 列出在数据库中的对象，必须分页
	 * 
	 * @param entity 查询参数
	 * @param page 数据库分页对象
	 * @return 数据库分页对象，不创建先的分页对象
	 */
	Page<T> list(T entity, Page<T> page);
}
